package com.lvhx.sofa3.client.service;

import com.lvhx.sofa3.client.dao.mapper.extend.UserExtendMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

@Service
public class TestService {
    @Autowired
    UserExtendMapper userExtendMapper;

    /**
     * 数据库事务的传播形式是指，当一个事务方法被另一个事务方法调用时，这个事务方法的事务属性如何影响另一个事务方法的事务行为
     * 可供选择的事务传播类型有七种，分别是：
     * PROPAGATION_REQUIRED（默认）：如果当前没有事务，就新建一个事务，如果已经存在一个事务中，就加入到这个事务中。
     * PROPAGATION_SUPPORTS：支持当前事务，如果当前存在事务，则加入该事务，如果当前不存在事务，则以非事务的方式继续运行。
     * PROPAGATION_MANDATORY：强制当前事务存在，如果当前不存在事务，就抛出异常。
     * PROPAGATION_REQUIRES_NEW：重新创建一个新的事务，如果当前存在事务，暂停当前的事务。
     * PROPAGATION_NOT_SUPPORTED：以非事务方式运行，如果当前存在事务，就把当前事务挂起。
     * PROPAGATION_NEVER：以非事务方式运行，如果当前存在事务，就抛出异常。
     * PROPAGATION_NESTED：如果当前存在事务，则创建一个事务作为当前事务的嵌套事务来运行；如果当前没有事务，则进行与PROPAGATION_REQUIRED类似的操作，创建一个新的事务。
     */
    @Transactional(propagation = Propagation.MANDATORY)
    public void changeUserName(Long id,String name){
        userExtendMapper.changeUserName(id,name);
    }
}
